package com.juli.school.service.impl;

import javax.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.juli.school.dao.entity.Mall;
import com.juli.school.dao.entity.Pub;
import com.juli.school.dao.mapper.MallMapper;
import com.juli.school.service.CommonService;
import com.juli.school.service.bo.MallBo;
import com.juli.school.service.enums.EnumModule;
import com.juli.school.service.utils.BeanUtils;
import com.juli.school.utils.core.model.CommonResp;
import com.juli.school.utils.core.model.ListResp;
import com.juli.school.utils.core.model.PageResp;
import com.juli.school.utils.log.annotation.DigestLog;

/**
 * @Description: 闪购业务处理
 * @author Eve
 * @date 2017/9/7.
 */
@Service
public class MallService implements CommonService<MallBo> {
	
	private static final Logger logger = LoggerFactory.getLogger(MallService.class);
	
	@Resource
	MallMapper mallMapper;
	
	@Resource
	PubService pubService;
	
	/**
	 * @Description: 新增闪购业务信息
	 * @author gaoxiang
	 * @date 2017年11月17日 下午2:51:40
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> add(MallBo mallBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			mallBo.setType(EnumModule.Mall.code);
			// 先保存总的 发布信息表
			Pub pub = pubService.add(mallBo);
			BeanUtils.copyProperties(mallBo, pub);
			// 再保存详细闪购业务信息
			mallMapper.insert(mallBo);
			commonResp.setData(mallBo.getSnStamp());
			commonResp.success();
		} catch (Exception e) {
			logger.error("新增闪购业务信息异常", e);
			commonResp.exception("新增闪购业务信息异常" + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 删除闪购业务信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:40:06
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> delete(String snStamp,String stuId) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			pubService.deleteBySnStamp(snStamp,stuId);
			mallMapper.deleteBySnStamp(snStamp);
			commonResp.success();
		} catch (Exception e) {
			logger.error("删除闪购业务信息异常", e);
			commonResp.exception("删除闪购业务信息异常"+e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 更新闪购业务发布信息
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:41:33
	 */
	@DigestLog
	@Transactional
	public CommonResp<String> update(MallBo mallBo) {
		CommonResp<String> commonResp = new CommonResp<String>();
		try {
			mallBo.setType(EnumModule.Mall.code);
			// 先更新总的 发布信息表
			Pub pub = pubService.update(mallBo);
			BeanUtils.copyProperties(mallBo, pub);
			// 再更新详细闪购业务信息
			mallMapper.update(mallBo);
			commonResp.success();
			commonResp.setData(mallBo.getSnStamp());
		} catch (Exception e) {
			logger.error("更新闪购业务信息异常", e);
			commonResp.exception("更新闪购业务信息异常 " + e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 获取闪购业务详情
	 * @author gaoxiang
	 * @date 2017年11月19日 下午3:43:22
	 */
	@DigestLog
	public CommonResp<MallBo> detail(Pub req) {
		CommonResp<MallBo> commonResp = new CommonResp<MallBo>();
		try {
			req.setType(EnumModule.Mall.code);
			MallBo mallBo = new MallBo();
			// 先查询发布信息总表
			Pub detail = pubService.detail(req);
			BeanUtils.copyProperties(mallBo, detail);
			// 如果有多余的字段，请查询详情表
			Mall mall = mallMapper.getBySnStamp(detail.getSnStamp());
			mallBo.setMallKind(mall.getMallKind());
			mallBo.setPriceNow(mall.getPriceNow());
			mallBo.setUrl(mall.getUrl());
			mallBo.setBeginTime(mall.getBeginTime());
			mallBo.setToTime(mall.getToTime());
			commonResp.setData(mallBo);
			commonResp.success();
		} catch (Exception e) {
			logger.error("获取发布信息详情发生异常", e);
			commonResp.exception("获取发布信息详情发生异常"+e.getMessage());
		}
		return commonResp;
	}
	
	/**
	 * @Description: 分页查询失物信息
	 * @author gaoxiang
	 * @date 2017年8月25日 下午11:36:40
	 */
	public CommonResp<PageResp<Pub>> listPage(MallBo req) {
		req.setType(EnumModule.Mall.code);
		return pubService.listPage(req);
	}

	public CommonResp<ListResp<Pub>> list(MallBo req) {
		req.setType(EnumModule.Mall.code);
		return pubService.list(req);
	}
}
